#include <stdio.h>

// 全局变量：定义时不被任何函数包含   静态全局区：里面放静态变量和全局变量
// 全局变量能被所有函数访问
// 少用全局变量：
int b = 20;

// 指针函数：返回值是指针的函数
int *func()
{
    // 错误
    //  int a = 10;
    //  return &a;

    // 静态关键字：修饰的变量会被放在静态全局区中
    // 静态全局区：直到程序结束时才回收释放
    // static: 1.静态变量只初始化一次
    //         2.延长变量的生命周期

    static int a = 10; // 只执行一次
    a++;
    b++;
    return &a;
}

int add(int a, int b) // 函数的内存是代码段
{
    return a + b
}

// 函数指针：指向函数的指针 （指针始终指向内存）

int main()
{
    // 错误
    //  int *p =func();
    //  printf("%d\n",*p);//用不了，上面函数结束，指针销毁；可看下报错；

    // 局部变量的优先级高于全局变量
    // int b=10;
    //  int *p =func();
    //  func();//调两次，输出12
    //  printf("%d\n",*p);
    //  printf("b=%d\n",b);//b=22（未在main里面定义b时）

    // 函数指针：指向函数的指针 （指针始终指向内存）
    int (*p)(int, int) = add; //
    // int (*p)(int, int) = &add;//same as above
    int c = p(1, 2); // 用法（与普通函数一样）
    printf("%d\n", c);

    return 0;
}
